import { Command } from 'commander';

const program = new Command()

program
  .command('api-methods')
  .alias('apim')
  .description('生成 API 调用方法')
  .argument('<dir>', '需要扫描的 API 目录')
  .argument('<output>', '输出的文件夹')

  .action((dir, output, options) => {
    import('./generate/api/methods').then(module => {
      module.default(dir, output);
    });
  });

program
  .command('api-routes')
  .alias('apir')
  .description('生成 RESETful API 文件的路由注册代码')
  .argument('<dir>', '需要扫描的 API 目录')
  .argument('<output>', '输出的文件路径')

  .action((dir, output, options) => {
    import('./generate/api/routes').then(module => {
      module.default(dir, output);
    });
  });

program
  .command('app-release-zip')
  .alias('rz')
  .description('create release zip package')
  .argument('[name]', '- name of the package')
  .argument('[version]', '- version of the package')

  .action((name, version, options) => {
    import('./generate/app/release-zip').then(module => {
      module.default(name, version);
    });
  });

program
  .command('app-single-page')
  .alias('spar')
  .description('创建单页面应用的路由文件')
  .argument('<root>', '根目录')
  .argument('[appTsx]', 'App.tsx 文件路径 默认 ./src/App.tsx')

  .action((root, appTsx, options) => {
    import('./generate/app/single-page').then(module => {
      module.default(root, appTsx);
    });
  });

program
  .command('color-oklch')
  .alias('rgb')
  .description('将 css 文件中的 oklch颜色定义 转换为 rgb')
  .argument('<file>', '文件路径')

  .action((file, options) => {
    import('./generate/color/oklch').then(module => {
      module.default(file);
    });
  });

program
  .command('gnindex')
  .alias('gni')
  .description('生成 Generate 指令的注册代码')
  .argument('<dir>', '需要扫描的 Generate 目录')
  .argument('<output>', '输出的文件路径')

  .action((dir, output, options) => {
    import('./generate/gnindex').then(module => {
      module.default(dir, output);
    });
  });

program
  .command('keypair')
  .alias('kp')
  .description('生成密钥对 (EC P-256)')
  .argument('<output>', '输出文件路径')

  .action((output, options) => {
    import('./generate/keypair').then(module => {
      module.default(output);
    });
  });

program
  .command('refer-map')
  .alias('referMap')
  .description('生成引用映射, 分析循环引用情况')
  .argument('<dir>', '扫描目录')
  .argument('[output]', '输出文件, 输出映射表的 json 文件')

  .action((dir, output, options) => {
    import('./generate/refer-map').then(module => {
      module.default(dir, output);
    });
  });

program
  .command('xiaojiu-log')
  .alias('logJson')
  .description('分析日志文件, 将日志文件转换为 json 格式')
  .argument('<logFilePath>', '日志文件路径')

  .action((logFilePath, options) => {
    import('./generate/xiaojiu/log').then(module => {
      module.default(logFilePath);
    });
  });

program.parse(process.argv);